/** layui-v2.3.0 MIT License By https://www.layui.com */
!(function () {
  'use strict'
  var e = window.layui && layui.define,
    t = {
      getPath: (function () {
        var e = document.currentScript
          ? document.currentScript.src
          : (function () {
              for (
                var e, t = document.scripts, n = t.length - 1, a = n;
                a > 0;
                a--
              )
                if ('interactive' === t[a].readyState) {
                  e = t[a].src
                  break
                }
              return e || t[n].src
            })()
        return e.substring(0, e.lastIndexOf('/') + 1)
      })(),
      getStyle: function (e, t) {
        var n = e.currentStyle
          ? e.currentStyle
          : window.getComputedStyle(e, null)
        return n[n.getPropertyValue ? 'getPropertyValue' : 'getAttribute'](t)
      },
      link: function (e, a, i) {
        if (n.path) {
          var r = document.getElementsByTagName('head')[0],
            o = document.createElement('link')
          'string' == typeof a && (i = a)
          var s = (i || e).replace(/\.|\//g, ''),
            l = 'layuicss-' + s,
            d = 0
          ;(o.rel = 'stylesheet'),
            (o.href = n.path + e),
            (o.id = l),
            document.getElementById(l) || r.appendChild(o),
            'function' == typeof a &&
              !(function c() {
                return ++d > 80
                  ? window.console && console.error('laydate.css: Invalid')
                  : void (1989 ===
                    parseInt(t.getStyle(document.getElementById(l), 'width'))
                      ? a()
                      : setTimeout(c, 100))
              })()
        }
      }
    },
    n = {
      v: '5.0.9',
      config: {},
      index: window.laydate && window.laydate.v ? 1e5 : 0,
      path: t.getPath,
      set: function (e) {
        var t = this
        return (t.config = w.extend({}, t.config, e)), t
      },
      ready: function (a) {
        var i = 'laydate',
          r = '',
          o =
            (e ? 'modules/laydate/' : 'theme/') +
            'default/laydate.css?v=' +
            n.v +
            r
        return e ? layui.addcss(o, a, i) : t.link(o, a, i), this
      }
    },
    a = function () {
      var e = this
      return {
        hint: function (t) {
          e.hint.call(e, t)
        },
        config: e.config
      }
    },
    i = 'laydate',
    r = '.layui-laydate',
    o = 'layui-this',
    s = 'laydate-disabled',
    l = '开始日期超出了结束日期<br>建议重新选择',
    d = [100, 2e5],
    c = 'layui-laydate-static',
    m = 'layui-laydate-list',
    u = 'laydate-selected',
    h = 'layui-laydate-hint',
    y = 'laydate-day-prev',
    f = 'laydate-day-next',
    p = 'layui-laydate-footer',
    g = '.laydate-btns-confirm',
    v = 'laydate-time-text',
    D = '.laydate-btns-time',
    T = function (e) {
      var t = this
      ;(t.index = ++n.index),
        (t.config = w.extend({}, t.config, n.config, e)),
        n.ready(function () {
          t.init()
        })
    },
    w = function (e) {
      return new C(e)
    },
    C = function (e) {
      for (
        var t = 0,
          n =
            'object' == typeof e
              ? [e]
              : ((this.selector = e), document.querySelectorAll(e || null));
        t < n.length;
        t++
      )
        this.push(n[t])
    }
  ;(C.prototype = []),
    (C.prototype.constructor = C),
    (w.extend = function () {
      var e = 1,
        t = arguments,
        n = function (e, t) {
          e = e || (t.constructor === Array ? [] : {})
          for (var a in t)
            e[a] = t[a] && t[a].constructor === Object ? n(e[a], t[a]) : t[a]
          return e
        }
      for (t[0] = 'object' == typeof t[0] ? t[0] : {}; e < t.length; e++)
        'object' == typeof t[e] && n(t[0], t[e])
      return t[0]
    }),
    (w.ie = (function () {
      var e = navigator.userAgent.toLowerCase()
      return (
        !!(window.ActiveXObject || 'ActiveXObject' in window) &&
        ((e.match(/msie\s(\d+)/) || [])[1] || '11')
      )
    })()),
    (w.stope = function (e) {
      ;(e = e || window.event),
        e.stopPropagation ? e.stopPropagation() : (e.cancelBubble = !0)
    }),
    (w.each = function (e, t) {
      var n,
        a = this
      if ('function' != typeof t) return a
      if (((e = e || []), e.constructor === Object)) {
        for (n in e) if (t.call(e[n], n, e[n])) break
      } else for (n = 0; n < e.length && !t.call(e[n], n, e[n]); n++);
      return a
    }),
    (w.digit = function (e, t, n) {
      var a = ''
      ;(e = String(e)), (t = t || 2)
      for (var i = e.length; i < t; i++) a += '0'
      return e < Math.pow(10, t) ? a + (0 | e) : e
    }),
    (w.elem = function (e, t) {
      var n = document.createElement(e)
      return (
        w.each(t || {}, function (e, t) {
          n.setAttribute(e, t)
        }),
        n
      )
    }),
    (C.addStr = function (e, t) {
      return (
        (e = e.replace(/\s+/, ' ')),
        (t = t.replace(/\s+/, ' ').split(' ')),
        w.each(t, function (t, n) {
          new RegExp('\\b' + n + '\\b').test(e) || (e = e + ' ' + n)
        }),
        e.replace(/^\s|\s$/, '')
      )
    }),
    (C.removeStr = function (e, t) {
      return (
        (e = e.replace(/\s+/, ' ')),
        (t = t.replace(/\s+/, ' ').split(' ')),
        w.each(t, function (t, n) {
          var a = new RegExp('\\b' + n + '\\b')
          a.test(e) && (e = e.replace(a, ''))
        }),
        e.replace(/\s+/, ' ').replace(/^\s|\s$/, '')
      )
    }),
    (C.prototype.find = function (e) {
      var t = this,
        n = 0,
        a = [],
        i = 'object' == typeof e
      return (
        this.each(function (r, o) {
          for (
            var s = i ? [e] : o.querySelectorAll(e || null);
            n < s.length;
            n++
          )
            a.push(s[n])
          t.shift()
        }),
        i || (t.selector = (t.selector ? t.selector + ' ' : '') + e),
        w.each(a, function (e, n) {
          t.push(n)
        }),
        t
      )
    }),
    (C.prototype.each = function (e) {
      return w.each.call(this, this, e)
    }),
    (C.prototype.addClass = function (e, t) {
      return this.each(function (n, a) {
        a.className = C[t ? 'removeStr' : 'addStr'](a.className, e)
      })
    }),
    (C.prototype.removeClass = function (e) {
      return this.addClass(e, !0)
    }),
    (C.prototype.hasClass = function (e) {
      var t = !1
      return (
        this.each(function (n, a) {
          new RegExp('\\b' + e + '\\b').test(a.className) && (t = !0)
        }),
        t
      )
    }),
    (C.prototype.attr = function (e, t) {
      var n = this
      return void 0 === t
        ? (function () {
            if (n.length > 0) return n[0].getAttribute(e)
          })()
        : n.each(function (n, a) {
            a.setAttribute(e, t)
          })
    }),
    (C.prototype.removeAttr = function (e) {
      return this.each(function (t, n) {
        n.removeAttribute(e)
      })
    }),
    (C.prototype.html = function (e) {
      return this.each(function (t, n) {
        n.innerHTML = e
      })
    }),
    (C.prototype.val = function (e) {
      return this.each(function (t, n) {
        n.value = e
      })
    }),
    (C.prototype.append = function (e) {
      return this.each(function (t, n) {
        'object' == typeof e
          ? n.appendChild(e)
          : (n.innerHTML = n.innerHTML + e)
      })
    }),
    (C.prototype.remove = function (e) {
      return this.each(function (t, n) {
        e ? n.removeChild(e) : n.parentNode.removeChild(n)
      })
    }),
    (C.prototype.on = function (e, t) {
      return this.each(function (n, a) {
        a.attachEvent
          ? a.attachEvent('on' + e, function (e) {
              ;(e.target = e.srcElement), t.call(a, e)
            })
          : a.addEventListener(e, t, !1)
      })
    }),
    (C.prototype.off = function (e, t) {
      return this.each(function (n, a) {
        a.detachEvent
          ? a.detachEvent('on' + e, t)
          : a.removeEventListener(e, t, !1)
      })
    }),
    (T.isLeapYear = function (e) {
      return (e % 4 === 0 && e % 100 !== 0) || e % 400 === 0
    }),
    (T.prototype.config = {
      type: 'date',
      range: !1,
      format: 'yyyy-MM-dd',
      value: null,
      isInitValue: !0,
      min: '1900-1-1',
      max: '2099-12-31',
      trigger: 'focus',
      show: !1,
      showBottom: !0,
      btns: ['clear', 'now', 'confirm'],
      lang: 'cn',
      theme: 'default',
      position: null,
      calendar: !1,
      mark: {},
      zIndex: null,
      done: null,
      change: null
    }),
    (T.prototype.lang = function () {
      var e = this,
        t = e.config,
        n = {
          cn: {
            weeks: ['日', '一', '二', '三', '四', '五', '六'],
            time: ['时', '分', '秒'],
            timeTips: '选择时间',
            startTime: '开始时间',
            endTime: '结束时间',
            dateTips: '返回日期',
            month: [
              '一',
              '二',
              '三',
              '四',
              '五',
              '六',
              '七',
              '八',
              '九',
              '十',
              '十一',
              '十二'
            ],
            tools: { confirm: '确定', clear: '清空', now: '现在' }
          },
          en: {
            weeks: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
            time: ['Hours', 'Minutes', 'Seconds'],
            timeTips: 'Select Time',
            startTime: 'Start Time',
            endTime: 'End Time',
            dateTips: 'Select Date',
            month: [
              'Jan',
              'Feb',
              'Mar',
              'Apr',
              'May',
              'Jun',
              'Jul',
              'Aug',
              'Sep',
              'Oct',
              'Nov',
              'Dec'
            ],
            tools: { confirm: 'Confirm', clear: 'Clear', now: 'Now' }
          }
        }
      return n[t.lang] || n.cn
    }),
    (T.prototype.init = function () {
      var e = this,
        t = e.config,
        n = 'yyyy|y|MM|M|dd|d|HH|H|mm|m|ss|s',
        a = 'static' === t.position,
        i = {
          year: 'yyyy',
          month: 'yyyy-MM',
          date: 'yyyy-MM-dd',
          time: 'HH:mm:ss',
          datetime: 'yyyy-MM-dd HH:mm:ss'
        }
      ;(t.elem = w(t.elem)),
        (t.eventElem = w(t.eventElem)),
        t.elem[0] &&
          (t.range === !0 && (t.range = '-'),
          t.format === i.date && (t.format = i[t.type]),
          (e.format = t.format.match(new RegExp(n + '|.', 'g')) || []),
          (e.EXP_IF = ''),
          (e.EXP_SPLIT = ''),
          w.each(e.format, function (t, a) {
            var i = new RegExp(n).test(a)
              ? '\\d{' +
                (function () {
                  return new RegExp(n).test(
                    e.format[0 === t ? t + 1 : t - 1] || ''
                  )
                    ? /^yyyy|y$/.test(a)
                      ? 4
                      : a.length
                    : /^yyyy$/.test(a)
                    ? '1,4'
                    : /^y$/.test(a)
                    ? '1,308'
                    : '1,2'
                })() +
                '}'
              : '\\' + a
            ;(e.EXP_IF = e.EXP_IF + i),
              (e.EXP_SPLIT = e.EXP_SPLIT + '(' + i + ')')
          }),
          (e.EXP_IF = new RegExp(
            '^' +
              (t.range
                ? e.EXP_IF + '\\s\\' + t.range + '\\s' + e.EXP_IF
                : e.EXP_IF) +
              '$'
          )),
          (e.EXP_SPLIT = new RegExp('^' + e.EXP_SPLIT + '$', '')),
          e.isInput(t.elem[0]) ||
            ('focus' === t.trigger && (t.trigger = 'click')),
          t.elem.attr('lay-key') ||
            (t.elem.attr('lay-key', e.index),
            t.eventElem.attr('lay-key', e.index)),
          (t.mark = w.extend(
            {},
            t.calendar && 'cn' === t.lang
              ? {
                  '0-1-1': '元旦',
                  '0-2-14': '情人',
                  '0-3-8': '妇女',
                  '0-3-12': '植树',
                  '0-4-1': '愚人',
                  '0-5-1': '劳动',
                  '0-5-4': '青年',
                  '0-6-1': '儿童',
                  '0-9-10': '教师',
                  '0-9-18': '国耻',
                  '0-10-1': '国庆',
                  '0-12-25': '圣诞'
                }
              : {},
            t.mark
          )),
          w.each(['min', 'max'], function (e, n) {
            var a = [],
              i = []
            if ('number' == typeof t[n]) {
              var r = t[n],
                o = new Date().getTime(),
                s = 864e5,
                l = new Date(r ? (r < s ? o + r * s : r) : o)
              ;(a = [l.getFullYear(), l.getMonth() + 1, l.getDate()]),
                r < s || (i = [l.getHours(), l.getMinutes(), l.getSeconds()])
            } else (a = (t[n].match(/\d+-\d+-\d+/) || [''])[0].split('-')), (i = (t[n].match(/\d+:\d+:\d+/) || [''])[0].split(':'))
            t[n] = {
              year: 0 | a[0] || new Date().getFullYear(),
              month: a[1] ? (0 | a[1]) - 1 : new Date().getMonth(),
              date: 0 | a[2] || new Date().getDate(),
              hours: 0 | i[0],
              minutes: 0 | i[1],
              seconds: 0 | i[2]
            }
          }),
          (e.elemID = 'layui-laydate' + t.elem.attr('lay-key')),
          (t.show || a) && e.render(),
          a || e.events(),
          t.value &&
            t.isInitValue &&
            (t.value.constructor === Date
              ? e.setValue(e.parse(0, e.systemDate(t.value)))
              : e.setValue(t.value)))
    }),
    (T.prototype.render = function () {
      var e = this,
        t = e.config,
        n = e.lang(),
        a = 'static' === t.position,
        i = (e.elem = w.elem('div', {
          id: e.elemID,
          class: [
            'layui-laydate',
            t.range ? ' layui-laydate-range' : '',
            a ? ' ' + c : '',
            t.theme && 'default' !== t.theme && !/^#/.test(t.theme)
              ? ' laydate-theme-' + t.theme
              : ''
          ].join('')
        })),
        r = (e.elemMain = []),
        o = (e.elemHeader = []),
        s = (e.elemCont = []),
        l = (e.table = []),
        d = (e.footer = w.elem('div', { class: p }))
      if (
        (t.zIndex && (i.style.zIndex = t.zIndex),
        w.each(new Array(2), function (e) {
          if (!t.range && e > 0) return !0
          var a = w.elem('div', { class: 'layui-laydate-header' }),
            i = [
              (function () {
                var e = w.elem('i', {
                  class: 'layui-icon laydate-icon laydate-prev-y'
                })
                return (e.innerHTML = '&#xe65a;'), e
              })(),
              (function () {
                var e = w.elem('i', {
                  class: 'layui-icon laydate-icon laydate-prev-m'
                })
                return (e.innerHTML = '&#xe603;'), e
              })(),
              (function () {
                var e = w.elem('div', { class: 'laydate-set-ym' }),
                  t = w.elem('span'),
                  n = w.elem('span')
                return e.appendChild(t), e.appendChild(n), e
              })(),
              (function () {
                var e = w.elem('i', {
                  class: 'layui-icon laydate-icon laydate-next-m'
                })
                return (e.innerHTML = '&#xe602;'), e
              })(),
              (function () {
                var e = w.elem('i', {
                  class: 'layui-icon laydate-icon laydate-next-y'
                })
                return (e.innerHTML = '&#xe65b;'), e
              })()
            ],
            d = w.elem('div', { class: 'layui-laydate-content' }),
            c = w.elem('table'),
            m = w.elem('thead'),
            u = w.elem('tr')
          w.each(i, function (e, t) {
            a.appendChild(t)
          }),
            m.appendChild(u),
            w.each(new Array(6), function (e) {
              var t = c.insertRow(0)
              w.each(new Array(7), function (a) {
                if (0 === e) {
                  var i = w.elem('th')
                  ;(i.innerHTML = n.weeks[a]), u.appendChild(i)
                }
                t.insertCell(a)
              })
            }),
            c.insertBefore(m, c.children[0]),
            d.appendChild(c),
            (r[e] = w.elem('div', {
              class: 'layui-laydate-main laydate-main-list-' + e
            })),
            r[e].appendChild(a),
            r[e].appendChild(d),
            o.push(i),
            s.push(d),
            l.push(c)
        }),
        w(d).html(
          (function () {
            var e = [],
              i = []
            return (
              'datetime' === t.type &&
                e.push(
                  '<span lay-type="datetime" class="laydate-btns-time">' +
                    n.timeTips +
                    '</span>'
                ),
              w.each(t.btns, function (e, r) {
                var o = n.tools[r] || 'btn'
                ;(t.range && 'now' === r) ||
                  (a &&
                    'clear' === r &&
                    (o = 'cn' === t.lang ? '重置' : 'Reset'),
                  i.push(
                    '<span lay-type="' +
                      r +
                      '" class="laydate-btns-' +
                      r +
                      '">' +
                      o +
                      '</span>'
                  ))
              }),
              e.push(
                '<div class="laydate-footer-btns">' + i.join('') + '</div>'
              ),
              e.join('')
            )
          })()
        ),
        w.each(r, function (e, t) {
          i.appendChild(t)
        }),
        t.showBottom && i.appendChild(d),
        /^#/.test(t.theme))
      ) {
        var m = w.elem('style'),
          u = [
            '#{{id}} .layui-laydate-header{background-color:{{theme}};}',
            '#{{id}} .layui-this{background-color:{{theme}} !important;}'
          ]
            .join('')
            .replace(/{{id}}/g, e.elemID)
            .replace(/{{theme}}/g, t.theme)
        'styleSheet' in m
          ? (m.setAttribute('type', 'text/css'), (m.styleSheet.cssText = u))
          : (m.innerHTML = u),
          w(i).addClass('laydate-theme-molv'),
          i.appendChild(m)
      }
      e.remove(T.thisElemDate),
        a ? t.elem.append(i) : (document.body.appendChild(i), e.position()),
        e.checkDate().calendar(),
        e.changeEvent(),
        (T.thisElemDate = e.elemID),
        'function' == typeof t.ready &&
          t.ready(w.extend({}, t.dateTime, { month: t.dateTime.month + 1 }))
    }),
    (T.prototype.remove = function (e) {
      var t = this,
        n = (t.config, w('#' + (e || t.elemID)))
      return (
        n.hasClass(c) ||
          t.checkDate(function () {
            n.remove()
          }),
        t
      )
    }),
    (T.prototype.position = function () {
      var e = this,
        t = e.config,
        n = e.bindElem || t.elem[0],
        a = n.getBoundingClientRect(),
        i = e.elem.offsetWidth,
        r = e.elem.offsetHeight,
        o = function (e) {
          return (
            (e = e ? 'scrollLeft' : 'scrollTop'),
            document.body[e] | document.documentElement[e]
          )
        },
        s = function (e) {
          return document.documentElement[e ? 'clientWidth' : 'clientHeight']
        },
        l = 5,
        d = a.left,
        c = a.bottom
      d + i + l > s('width') && (d = s('width') - i - l),
        c + r + l > s() &&
          ((c = a.top > r ? a.top - r : s() - r), (c -= 2 * l)),
        t.position && (e.elem.style.position = t.position),
        (e.elem.style.left = d + ('fixed' === t.position ? 0 : o(1)) + 'px'),
        (e.elem.style.top = c + ('fixed' === t.position ? 0 : o()) + 'px')
    }),
    (T.prototype.hint = function (e) {
      var t = this,
        n = (t.config, w.elem('div', { class: h }))
      ;(n.innerHTML = e || ''),
        w(t.elem)
          .find('.' + h)
          .remove(),
        t.elem.appendChild(n),
        clearTimeout(t.hinTimer),
        (t.hinTimer = setTimeout(function () {
          w(t.elem)
            .find('.' + h)
            .remove()
        }, 3e3))
    }),
    (T.prototype.getAsYM = function (e, t, n) {
      return (
        n ? t-- : t++,
        t < 0 && ((t = 11), e--),
        t > 11 && ((t = 0), e++),
        [e, t]
      )
    }),
    (T.prototype.systemDate = function (e) {
      var t = e || new Date()
      return {
        year: t.getFullYear(),
        month: t.getMonth(),
        date: t.getDate(),
        hours: e ? e.getHours() : 0,
        minutes: e ? e.getMinutes() : 0,
        seconds: e ? e.getSeconds() : 0
      }
    }),
    (T.prototype.checkDate = function (e) {
      var t,
        a,
        i = this,
        r = (new Date(), i.config),
        o = (r.dateTime = r.dateTime || i.systemDate()),
        s = i.bindElem || r.elem[0],
        l =
          (i.isInput(s) ? 'val' : 'html',
          i.isInput(s) ? s.value : 'static' === r.position ? '' : s.innerHTML),
        c = function (e) {
          e.year > d[1] && ((e.year = d[1]), (a = !0)),
            e.month > 11 && ((e.month = 11), (a = !0)),
            e.hours > 23 && ((e.hours = 0), (a = !0)),
            e.minutes > 59 && ((e.minutes = 0), e.hours++, (a = !0)),
            e.seconds > 59 && ((e.seconds = 0), e.minutes++, (a = !0)),
            (t = n.getEndDate(e.month + 1, e.year)),
            e.date > t && ((e.date = t), (a = !0))
        },
        m = function (e, t, n) {
          var o = ['startTime', 'endTime']
          ;(t = (t.match(i.EXP_SPLIT) || []).slice(1)),
            (n = n || 0),
            r.range && (i[o[n]] = i[o[n]] || {}),
            w.each(i.format, function (s, l) {
              var c = parseFloat(t[s])
              t[s].length < l.length && (a = !0),
                /yyyy|y/.test(l)
                  ? (c < d[0] && ((c = d[0]), (a = !0)), (e.year = c))
                  : /MM|M/.test(l)
                  ? (c < 1 && ((c = 1), (a = !0)), (e.month = c - 1))
                  : /dd|d/.test(l)
                  ? (c < 1 && ((c = 1), (a = !0)), (e.date = c))
                  : /HH|H/.test(l)
                  ? (c < 1 && ((c = 0), (a = !0)),
                    (e.hours = c),
                    r.range && (i[o[n]].hours = c))
                  : /mm|m/.test(l)
                  ? (c < 1 && ((c = 0), (a = !0)),
                    (e.minutes = c),
                    r.range && (i[o[n]].minutes = c))
                  : /ss|s/.test(l) &&
                    (c < 1 && ((c = 0), (a = !0)),
                    (e.seconds = c),
                    r.range && (i[o[n]].seconds = c))
            }),
            c(e)
        }
      return 'limit' === e
        ? (c(o), i)
        : ((l = l || r.value),
          'string' == typeof l &&
            (l = l.replace(/\s+/g, ' ').replace(/^\s|\s$/g, '')),
          i.startState &&
            !i.endState &&
            (delete i.startState, (i.endState = !0)),
          'string' == typeof l && l
            ? i.EXP_IF.test(l)
              ? r.range
                ? ((l = l.split(' ' + r.range + ' ')),
                  (i.startDate = i.startDate || i.systemDate()),
                  (i.endDate = i.endDate || i.systemDate()),
                  (r.dateTime = w.extend({}, i.startDate)),
                  w.each([i.startDate, i.endDate], function (e, t) {
                    m(t, l[e], e)
                  }))
                : m(o, l)
              : (i.hint(
                  '日期格式不合法<br>必须遵循下述格式：<br>' +
                    (r.range
                      ? r.format + ' ' + r.range + ' ' + r.format
                      : r.format) +
                    '<br>已为你重置'
                ),
                (a = !0))
            : l && l.constructor === Date
            ? (r.dateTime = i.systemDate(l))
            : ((r.dateTime = i.systemDate()),
              delete i.startState,
              delete i.endState,
              delete i.startDate,
              delete i.endDate,
              delete i.startTime,
              delete i.endTime),
          c(o),
          a &&
            l &&
            i.setValue(r.range ? (i.endDate ? i.parse() : '') : i.parse()),
          e && e(),
          i)
    }),
    (T.prototype.mark = function (e, t) {
      var n,
        a = this,
        i = a.config
      return (
        w.each(i.mark, function (e, a) {
          var i = e.split('-')
          ;(i[0] != t[0] && 0 != i[0]) ||
            (i[1] != t[1] && 0 != i[1]) ||
            i[2] != t[2] ||
            (n = a || t[2])
        }),
        n && e.html('<span class="laydate-day-mark">' + n + '</span>'),
        a
      )
    }),
    (T.prototype.limit = function (e, t, n, a) {
      var i,
        r = this,
        o = r.config,
        l = {},
        d = o[n > 41 ? 'endDate' : 'dateTime'],
        c = w.extend({}, d, t || {})
      return (
        w.each({ now: c, min: o.min, max: o.max }, function (e, t) {
          l[e] = r
            .newDate(
              w.extend(
                { year: t.year, month: t.month, date: t.date },
                (function () {
                  var e = {}
                  return (
                    w.each(a, function (n, a) {
                      e[a] = t[a]
                    }),
                    e
                  )
                })()
              )
            )
            .getTime()
        }),
        (i = l.now < l.min || l.now > l.max),
        e && e[i ? 'addClass' : 'removeClass'](s),
        i
      )
    }),
    (T.prototype.calendar = function (e) {
      var t,
        a,
        i,
        r = this,
        s = r.config,
        l = e || s.dateTime,
        c = new Date(),
        m = r.lang(),
        u = 'date' !== s.type && 'datetime' !== s.type,
        h = e ? 1 : 0,
        y = w(r.table[h]).find('td'),
        f = w(r.elemHeader[h][2]).find('span')
      if (
        (l.year < d[0] &&
          ((l.year = d[0]), r.hint('最低只能支持到公元' + d[0] + '年')),
        l.year > d[1] &&
          ((l.year = d[1]), r.hint('最高只能支持到公元' + d[1] + '年')),
        r.firstDate || (r.firstDate = w.extend({}, l)),
        c.setFullYear(l.year, l.month, 1),
        (t = c.getDay()),
        (a = n.getEndDate(l.month || 12, l.year)),
        (i = n.getEndDate(l.month + 1, l.year)),
        w.each(y, function (e, n) {
          var d = [l.year, l.month],
            c = 0
          ;(n = w(n)),
            n.removeAttr('class'),
            e < t
              ? ((c = a - t + e),
                n.addClass('laydate-day-prev'),
                (d = r.getAsYM(l.year, l.month, 'sub')))
              : e >= t && e < i + t
              ? ((c = e - t), s.range || (c + 1 === l.date && n.addClass(o)))
              : ((c = e - i - t),
                n.addClass('laydate-day-next'),
                (d = r.getAsYM(l.year, l.month))),
            d[1]++,
            (d[2] = c + 1),
            n.attr('lay-ymd', d.join('-')).html(d[2]),
            r
              .mark(n, d)
              .limit(n, { year: d[0], month: d[1] - 1, date: d[2] }, e)
        }),
        w(f[0]).attr('lay-ym', l.year + '-' + (l.month + 1)),
        w(f[1]).attr('lay-ym', l.year + '-' + (l.month + 1)),
        'cn' === s.lang
          ? (w(f[0])
              .attr('lay-type', 'year')
              .html(l.year + '年'),
            w(f[1])
              .attr('lay-type', 'month')
              .html(l.month + 1 + '月'))
          : (w(f[0]).attr('lay-type', 'month').html(m.month[l.month]),
            w(f[1]).attr('lay-type', 'year').html(l.year)),
        u &&
          (s.range &&
            (e
              ? (r.endDate = r.endDate || {
                  year: l.year + ('year' === s.type ? 1 : 0),
                  month: l.month + ('month' === s.type ? 0 : -1)
                })
              : (r.startDate = r.startDate || { year: l.year, month: l.month }),
            e &&
              ((r.listYM = [
                [r.startDate.year, r.startDate.month + 1],
                [r.endDate.year, r.endDate.month + 1]
              ]),
              r.list(s.type, 0).list(s.type, 1),
              'time' === s.type
                ? r.setBtnStatus(
                    '时间',
                    w.extend({}, r.systemDate(), r.startTime),
                    w.extend({}, r.systemDate(), r.endTime)
                  )
                : r.setBtnStatus(!0))),
          s.range || ((r.listYM = [[l.year, l.month + 1]]), r.list(s.type, 0))),
        s.range && !e)
      ) {
        var p = r.getAsYM(l.year, l.month)
        r.calendar(w.extend({}, l, { year: p[0], month: p[1] }))
      }
      return (
        s.range ||
          r.limit(w(r.footer).find(g), null, 0, [
            'hours',
            'minutes',
            'seconds'
          ]),
        s.range && e && !u && r.stampRange(),
        r
      )
    }),
    (T.prototype.list = function (e, t) {
      var n = this,
        a = n.config,
        i = a.dateTime,
        r = n.lang(),
        l = a.range && 'date' !== a.type && 'datetime' !== a.type,
        d = w.elem('ul', {
          class:
            m +
            ' ' +
            {
              year: 'laydate-year-list',
              month: 'laydate-month-list',
              time: 'laydate-time-list'
            }[e]
        }),
        c = n.elemHeader[t],
        u = w(c[2]).find('span'),
        h = n.elemCont[t || 0],
        y = w(h).find('.' + m)[0],
        f = 'cn' === a.lang,
        p = f ? '年' : '',
        T = n.listYM[t] || {},
        C = ['hours', 'minutes', 'seconds'],
        x = ['startTime', 'endTime'][t]
      if ((T[0] < 1 && (T[0] = 1), 'year' === e)) {
        var M,
          b = (M = T[0] - 7)
        b < 1 && (b = M = 1),
          w.each(new Array(15), function (e) {
            var i = w.elem('li', { 'lay-ym': M }),
              r = { year: M }
            M == T[0] && w(i).addClass(o),
              (i.innerHTML = M + p),
              d.appendChild(i),
              M < n.firstDate.year
                ? ((r.month = a.min.month), (r.date = a.min.date))
                : M >= n.firstDate.year &&
                  ((r.month = a.max.month), (r.date = a.max.date)),
              n.limit(w(i), r, t),
              M++
          }),
          w(u[f ? 0 : 1])
            .attr('lay-ym', M - 8 + '-' + T[1])
            .html(b + p + ' - ' + (M - 1 + p))
      } else if ('month' === e)
        w.each(new Array(12), function (e) {
          var i = w.elem('li', { 'lay-ym': e }),
            s = { year: T[0], month: e }
          e + 1 == T[1] && w(i).addClass(o),
            (i.innerHTML = r.month[e] + (f ? '月' : '')),
            d.appendChild(i),
            T[0] < n.firstDate.year
              ? (s.date = a.min.date)
              : T[0] >= n.firstDate.year && (s.date = a.max.date),
            n.limit(w(i), s, t)
        }),
          w(u[f ? 0 : 1])
            .attr('lay-ym', T[0] + '-' + T[1])
            .html(T[0] + p)
      else if ('time' === e) {
        var E = function () {
          w(d)
            .find('ol')
            .each(function (e, a) {
              w(a)
                .find('li')
                .each(function (a, i) {
                  n.limit(
                    w(i),
                    [
                      { hours: a },
                      { hours: n[x].hours, minutes: a },
                      { hours: n[x].hours, minutes: n[x].minutes, seconds: a }
                    ][e],
                    t,
                    [
                      ['hours'],
                      ['hours', 'minutes'],
                      ['hours', 'minutes', 'seconds']
                    ][e]
                  )
                })
            }),
            a.range ||
              n.limit(w(n.footer).find(g), n[x], 0, [
                'hours',
                'minutes',
                'seconds'
              ])
        }
        a.range
          ? n[x] || (n[x] = { hours: 0, minutes: 0, seconds: 0 })
          : (n[x] = i),
          w.each([24, 60, 60], function (e, t) {
            var a = w.elem('li'),
              i = ['<p>' + r.time[e] + '</p><ol>']
            w.each(new Array(t), function (t) {
              i.push(
                '<li' +
                  (n[x][C[e]] === t ? ' class="' + o + '"' : '') +
                  '>' +
                  w.digit(t, 2) +
                  '</li>'
              )
            }),
              (a.innerHTML = i.join('') + '</ol>'),
              d.appendChild(a)
          }),
          E()
      }
      if (
        (y && h.removeChild(y), h.appendChild(d), 'year' === e || 'month' === e)
      )
        w(n.elemMain[t]).addClass('laydate-ym-show'),
          w(d)
            .find('li')
            .on('click', function () {
              var r = 0 | w(this).attr('lay-ym')
              if (!w(this).hasClass(s)) {
                if (0 === t)
                  (i[e] = r),
                    l && (n.startDate[e] = r),
                    n.limit(w(n.footer).find(g), null, 0)
                else if (l) n.endDate[e] = r
                else {
                  var c =
                    'year' === e
                      ? n.getAsYM(r, T[1] - 1, 'sub')
                      : n.getAsYM(T[0], r, 'sub')
                  w.extend(i, { year: c[0], month: c[1] })
                }
                'year' === a.type || 'month' === a.type
                  ? (w(d)
                      .find('.' + o)
                      .removeClass(o),
                    w(this).addClass(o),
                    'month' === a.type &&
                      'year' === e &&
                      ((n.listYM[t][0] = r),
                      l && (n[['startDate', 'endDate'][t]].year = r),
                      n.list('month', t)))
                  : (n.checkDate('limit').calendar(), n.closeList()),
                  n.setBtnStatus(),
                  a.range || n.done(null, 'change'),
                  w(n.footer).find(D).removeClass(s)
              }
            })
      else {
        var S = w.elem('span', { class: v }),
          k = function () {
            w(d)
              .find('ol')
              .each(function (e) {
                var t = this,
                  a = w(t).find('li')
                ;(t.scrollTop = 30 * (n[x][C[e]] - 2)),
                  t.scrollTop <= 0 &&
                    a.each(function (e, n) {
                      if (!w(this).hasClass(s))
                        return (t.scrollTop = 30 * (e - 2)), !0
                    })
              })
          },
          H = w(c[2]).find('.' + v)
        k(),
          (S.innerHTML = a.range ? [r.startTime, r.endTime][t] : r.timeTips),
          w(n.elemMain[t]).addClass('laydate-time-show'),
          H[0] && H.remove(),
          c[2].appendChild(S),
          w(d)
            .find('ol')
            .each(function (e) {
              var t = this
              w(t)
                .find('li')
                .on('click', function () {
                  var r = 0 | this.innerHTML
                  w(this).hasClass(s) ||
                    (a.range ? (n[x][C[e]] = r) : (i[C[e]] = r),
                    w(t)
                      .find('.' + o)
                      .removeClass(o),
                    w(this).addClass(o),
                    E(),
                    k(),
                    (n.endDate || 'time' === a.type) && n.done(null, 'change'),
                    n.setBtnStatus())
                })
            })
      }
      return n
    }),
    (T.prototype.listYM = []),
    (T.prototype.closeList = function () {
      var e = this
      e.config
      w.each(e.elemCont, function (t, n) {
        w(this)
          .find('.' + m)
          .remove(),
          w(e.elemMain[t]).removeClass('laydate-ym-show laydate-time-show')
      }),
        w(e.elem)
          .find('.' + v)
          .remove()
    }),
    (T.prototype.setBtnStatus = function (e, t, n) {
      var a,
        i = this,
        r = i.config,
        o = w(i.footer).find(g),
        d = r.range && 'date' !== r.type && 'time' !== r.type
      d &&
        ((t = t || i.startDate),
        (n = n || i.endDate),
        (a = i.newDate(t).getTime() > i.newDate(n).getTime()),
        i.limit(null, t) || i.limit(null, n)
          ? o.addClass(s)
          : o[a ? 'addClass' : 'removeClass'](s),
        e && a && i.hint('string' == typeof e ? l.replace(/日期/g, e) : l))
    }),
    (T.prototype.parse = function (e, t) {
      var n = this,
        a = n.config,
        i =
          t ||
          (e
            ? w.extend({}, n.endDate, n.endTime)
            : a.range
            ? w.extend({}, n.startDate, n.startTime)
            : a.dateTime),
        r = n.format.concat()
      return (
        w.each(r, function (e, t) {
          ;/yyyy|y/.test(t)
            ? (r[e] = w.digit(i.year, t.length))
            : /MM|M/.test(t)
            ? (r[e] = w.digit(i.month + 1, t.length))
            : /dd|d/.test(t)
            ? (r[e] = w.digit(i.date, t.length))
            : /HH|H/.test(t)
            ? (r[e] = w.digit(i.hours, t.length))
            : /mm|m/.test(t)
            ? (r[e] = w.digit(i.minutes, t.length))
            : /ss|s/.test(t) && (r[e] = w.digit(i.seconds, t.length))
        }),
        a.range && !e
          ? r.join('') + ' ' + a.range + ' ' + n.parse(1)
          : r.join('')
      )
    }),
    (T.prototype.newDate = function (e) {
      return (
        (e = e || {}),
        new Date(
          e.year || 1,
          e.month || 0,
          e.date || 1,
          e.hours || 0,
          e.minutes || 0,
          e.seconds || 0
        )
      )
    }),
    (T.prototype.setValue = function (e) {
      var t = this,
        n = t.config,
        a = t.bindElem || n.elem[0],
        i = t.isInput(a) ? 'val' : 'html'
      return 'static' === n.position || w(a)[i](e || ''), this
    }),
    (T.prototype.stampRange = function () {
      var e,
        t,
        n = this,
        a = n.config,
        i = w(n.elem).find('td')
      if ((a.range && !n.endDate && w(n.footer).find(g).addClass(s), n.endDate))
        return (
          (e = n
            .newDate({
              year: n.startDate.year,
              month: n.startDate.month,
              date: n.startDate.date
            })
            .getTime()),
          (t = n
            .newDate({
              year: n.endDate.year,
              month: n.endDate.month,
              date: n.endDate.date
            })
            .getTime()),
          e > t
            ? n.hint(l)
            : void w.each(i, function (a, i) {
                var r = w(i).attr('lay-ymd').split('-'),
                  s = n
                    .newDate({ year: r[0], month: r[1] - 1, date: r[2] })
                    .getTime()
                w(i).removeClass(u + ' ' + o),
                  (s !== e && s !== t) ||
                    w(i).addClass(w(i).hasClass(y) || w(i).hasClass(f) ? u : o),
                  s > e && s < t && w(i).addClass(u)
              })
        )
    }),
    (T.prototype.done = function (e, t) {
      var n = this,
        a = n.config,
        i = w.extend(
          {},
          n.startDate ? w.extend(n.startDate, n.startTime) : a.dateTime
        ),
        r = w.extend({}, w.extend(n.endDate, n.endTime))
      return (
        w.each([i, r], function (e, t) {
          'month' in t && w.extend(t, { month: t.month + 1 })
        }),
        (e = e || [n.parse(), i, r]),
        'function' == typeof a[t || 'done'] && a[t || 'done'].apply(a, e),
        n
      )
    }),
    (T.prototype.choose = function (e) {
      var t = this,
        n = t.config,
        a = n.dateTime,
        i = w(t.elem).find('td'),
        r = e.attr('lay-ymd').split('-'),
        l = function (e) {
          new Date()
          e && w.extend(a, r),
            n.range &&
              (t.startDate
                ? w.extend(t.startDate, r)
                : (t.startDate = w.extend({}, r, t.startTime)),
              (t.startYMD = r))
        }
      if (
        ((r = { year: 0 | r[0], month: (0 | r[1]) - 1, date: 0 | r[2] }),
        !e.hasClass(s))
      )
        if (n.range) {
          if (
            (w.each(['startTime', 'endTime'], function (e, n) {
              t[n] = t[n] || { hours: 0, minutes: 0, seconds: 0 }
            }),
            t.endState)
          )
            l(),
              delete t.endState,
              delete t.endDate,
              (t.startState = !0),
              i.removeClass(o + ' ' + u),
              e.addClass(o)
          else if (t.startState) {
            if (
              (e.addClass(o),
              t.endDate
                ? w.extend(t.endDate, r)
                : (t.endDate = w.extend({}, r, t.endTime)),
              t.newDate(r).getTime() < t.newDate(t.startYMD).getTime())
            ) {
              var d = w.extend({}, t.endDate, {
                hours: t.startDate.hours,
                minutes: t.startDate.minutes,
                seconds: t.startDate.seconds
              })
              w.extend(t.endDate, t.startDate, {
                hours: t.endDate.hours,
                minutes: t.endDate.minutes,
                seconds: t.endDate.seconds
              }),
                (t.startDate = d)
            }
            n.showBottom || t.done(),
              t.stampRange(),
              (t.endState = !0),
              t.done(null, 'change')
          } else e.addClass(o), l(), (t.startState = !0)
          w(t.footer).find(g)[t.endDate ? 'removeClass' : 'addClass'](s)
        } else
          'static' === n.position
            ? (l(!0), t.calendar().done().done(null, 'change'))
            : 'date' === n.type
            ? (l(!0), t.setValue(t.parse()).remove().done())
            : 'datetime' === n.type &&
              (l(!0), t.calendar().done(null, 'change'))
    }),
    (T.prototype.tool = function (e, t) {
      var n = this,
        a = n.config,
        i = a.dateTime,
        r = 'static' === a.position,
        o = {
          datetime: function () {
            w(e).hasClass(s) ||
              (n.list('time', 0),
              a.range && n.list('time', 1),
              w(e).attr('lay-type', 'date').html(n.lang().dateTips))
          },
          date: function () {
            n.closeList(),
              w(e).attr('lay-type', 'datetime').html(n.lang().timeTips)
          },
          clear: function () {
            n.setValue('').remove(),
              r && (w.extend(i, n.firstDate), n.calendar()),
              a.range &&
                (delete n.startState,
                delete n.endState,
                delete n.endDate,
                delete n.startTime,
                delete n.endTime),
              n.done(['', {}, {}])
          },
          now: function () {
            var e = new Date()
            w.extend(i, n.systemDate(), {
              hours: e.getHours(),
              minutes: e.getMinutes(),
              seconds: e.getSeconds()
            }),
              n.setValue(n.parse()).remove(),
              r && n.calendar(),
              n.done()
          },
          confirm: function () {
            if (a.range) {
              if (!n.endDate) return n.hint('请先选择日期范围')
              if (w(e).hasClass(s))
                return n.hint(
                  'time' === a.type ? l.replace(/日期/g, '时间') : l
                )
            } else if (w(e).hasClass(s))
              return n.hint('不在有效日期或时间范围内')
            n.done(), n.setValue(n.parse()).remove()
          }
        }
      o[t] && o[t]()
    }),
    (T.prototype.change = function (e) {
      var t = this,
        n = t.config,
        a = n.dateTime,
        i = n.range && ('year' === n.type || 'month' === n.type),
        r = t.elemCont[e || 0],
        o = t.listYM[e],
        s = function (s) {
          var l = ['startDate', 'endDate'][e],
            d = w(r).find('.laydate-year-list')[0],
            c = w(r).find('.laydate-month-list')[0]
          return (
            d && ((o[0] = s ? o[0] - 15 : o[0] + 15), t.list('year', e)),
            c && (s ? o[0]-- : o[0]++, t.list('month', e)),
            (d || c) &&
              (w.extend(a, { year: o[0] }),
              i && (t[l].year = o[0]),
              n.range || t.done(null, 'change'),
              t.setBtnStatus(),
              n.range || t.limit(w(t.footer).find(g), { year: o[0] })),
            d || c
          )
        }
      return {
        prevYear: function () {
          s('sub') ||
            (a.year--,
            t.checkDate('limit').calendar(),
            n.range || t.done(null, 'change'))
        },
        prevMonth: function () {
          var e = t.getAsYM(a.year, a.month, 'sub')
          w.extend(a, { year: e[0], month: e[1] }),
            t.checkDate('limit').calendar(),
            n.range || t.done(null, 'change')
        },
        nextMonth: function () {
          var e = t.getAsYM(a.year, a.month)
          w.extend(a, { year: e[0], month: e[1] }),
            t.checkDate('limit').calendar(),
            n.range || t.done(null, 'change')
        },
        nextYear: function () {
          s() ||
            (a.year++,
            t.checkDate('limit').calendar(),
            n.range || t.done(null, 'change'))
        }
      }
    }),
    (T.prototype.changeEvent = function () {
      var e = this
      e.config
      w(e.elem).on('click', function (e) {
        w.stope(e)
      }),
        w.each(e.elemHeader, function (t, n) {
          w(n[0]).on('click', function (n) {
            e.change(t).prevYear()
          }),
            w(n[1]).on('click', function (n) {
              e.change(t).prevMonth()
            }),
            w(n[2])
              .find('span')
              .on('click', function (n) {
                var a = w(this),
                  i = a.attr('lay-ym'),
                  r = a.attr('lay-type')
                i &&
                  ((i = i.split('-')),
                  (e.listYM[t] = [0 | i[0], 0 | i[1]]),
                  e.list(r, t),
                  w(e.footer).find(D).addClass(s))
              }),
            w(n[3]).on('click', function (n) {
              e.change(t).nextMonth()
            }),
            w(n[4]).on('click', function (n) {
              e.change(t).nextYear()
            })
        }),
        w.each(e.table, function (t, n) {
          var a = w(n).find('td')
          a.on('click', function () {
            e.choose(w(this))
          })
        }),
        w(e.footer)
          .find('span')
          .on('click', function () {
            var t = w(this).attr('lay-type')
            e.tool(this, t)
          })
    }),
    (T.prototype.isInput = function (e) {
      return /input|textarea/.test(e.tagName.toLocaleLowerCase())
    }),
    (T.prototype.events = function () {
      var e = this,
        t = e.config,
        n = function (n, a) {
          n.on(t.trigger, function () {
            a && (e.bindElem = this), e.render()
          })
        }
      t.elem[0] &&
        !t.elem[0].eventHandler &&
        (n(t.elem, 'bind'),
        n(t.eventElem),
        w(document)
          .on('click', function (n) {
            n.target !== t.elem[0] &&
              n.target !== t.eventElem[0] &&
              n.target !== w(t.closeStop)[0] &&
              e.remove()
          })
          .on('keydown', function (t) {
            13 === t.keyCode &&
              w('#' + e.elemID)[0] &&
              e.elemID === T.thisElem &&
              (t.preventDefault(), w(e.footer).find(g)[0].click())
          }),
        w(window).on('resize', function () {
          return !(!e.elem || !w(r)[0]) && void e.position()
        }),
        (t.elem[0].eventHandler = !0))
    }),
    (n.render = function (e) {
      var t = new T(e)
      return a.call(t)
    }),
    (n.getEndDate = function (e, t) {
      var n = new Date()
      return (
        n.setFullYear(t || n.getFullYear(), e || n.getMonth() + 1, 1),
        new Date(n.getTime() - 864e5).getDate()
      )
    }),
    (window.lay = window.lay || w),
    e
      ? (n.ready(),
        layui.define(function (e) {
          ;(n.path = layui.cache.dir), e(i, n)
        }))
      : 'function' == typeof define && define.amd
      ? define(function () {
          return n
        })
      : (function () {
          n.ready(), (window.laydate = n)
        })()
})()
